<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>


</body>
<script>
    // ------------------------------------------------------------------------------------
    //   冒泡
    // 随机数组
    // var a = Array.from({ length: 100000 }, (_, index) => index + 1).sort(() => Math.random() - 0.5)
    // function maoPao(a) {
    //     // 浅拷贝
    //     var a = [...a]
    //     // 异常处理
    //     if (!Array.isArray(a)) {
    //         return
    //     }
    //     if (a.length === 0) {
    //         return
    //     }
    //     // 循环
    //     // a.length - 1防止数组访问过界
    //     for (var i = 0; i < a.length - 1; i++) {
    //         // a.length - 1 - i 优化性能
    //         for (var j = 0; j < a.length - 1 - i; j++) {
    //             if (a[j] > a[j + 1]) {
    //                 // 交换变量方法一第三方变量
    //                 // var b = a[j];
    //                 // a[j] = a[j + 1];
    //                 // a[j + 1] = b
    //                 // 交换变量方法二
    //                 // a[j] = a[j] + a[j + 1]
    //                 // a[j + 1] = a[j] - a[j + 1]
    //                 // a[j] = a[j] - a[j + 1]
    //                 // 交换变量方法三解构赋值
    //                 [a[j], a[j + 1]] = [a[j + 1], a[j]]
    //             }
    //         }
    //     }
    //     return a
    // }
    // console.log(a);
    // console.time(maoPao(a));
    // console.log(maoPao(a));




    // ------------------------------------------------------------------------------------
    // 插入排序


















    // ------------------------------------------------------------------------------------
    // 快速排序
    var a = Array.from({ length: 10 }, (_, index) => index + 1).sort(() => Math.random() - 0.5)
    function quick(a) {
        var a = [...a]
        // 如果小于一
        if (a.length <= 1) {
            return a;
        }
        // 右侧数组小于基准值的数组
        var left = [];
        // 右侧数组大于基准值的数组
        var right = [];
        // 基准值
        var pivot = a[Math.floor(a.length / 2)]
        for (var i = 0; i < a.length; i++) {
            if (a[i] < pivot) left.push(a[i]);
            if (a[i] > pivot) right.push(a[i]);
        }
        // 把每次处理后的left、right、pivot递归调用
        return quick(left).concat([pivot], quick(right));

    }
    console.log(quick(a));



























</script>

</html>